package com.gin.no_gay_alliance.viewmodel;

import android.graphics.Color;

import com.gin.common.utils.TimeAgo;
import com.gin.nga.bbscode.entity.BbsTag;
import com.gin.nga.enums.EntranceType;
import com.gin.nga.enums.ReplyStatus;
import com.gin.nga.enums.TitleColor;
import com.gin.nga.response.field.ReplySimple;
import com.gin.nga.response.field.TitleFont;
import com.gin.nga.response.field.TopicInfo;
import com.gin.nga.response.field.TopicInfoSimple;
import com.gin.nga.response.field.TopicParent;

import java.time.ZonedDateTime;
import java.util.List;
import java.util.Locale;

/**
 * 主题项目，可能为：子版面入口，合集入口，主题入口
 *
 * @author : ginstone
 * @version : v1.0.0
 * @since : 2023/8/8 11:16
 **/
public class TopicItem {
    /**
     * 入口类型
     */
    public EntranceType entranceType;
    /**
     * 作者用户ID 可能为匿名
     */
    public String authorId;
    /**
     * 作者用户名
     */
    public String authorName;
    /**
     * 主题id
     */
    public long topicId;
    /**
     * 标题
     */
    public String title;
    /**
     * 最后回复用户名
     */
    public String lastPosterName;
    /**
     * 回复数
     */
    public int replyCount;
    /**
     * 发布时间
     */
    public ZonedDateTime postDateTime;
    /**
     * 最后回复时间
     */
    public ZonedDateTime lastPost;
    /**
     * 父版面名称
     */
    public String parentForumName;
    /**
     * 版面id (仅当为版面入口时)
     */
    public Long forumId;
    /**
     * 回复id（仅出现在搜索用户回复）
     */
    public Long replyId;
    /**
     * 回复时间（仅出现在搜索用户回复）
     */
    public String replyTimestamp;
    /**
     * 回复正文（仅出现在搜索用户回复）
     */
    public String replyContent;
    /**
     * 回复节点（仅出现在搜索用户回复）
     */
    public List<BbsTag> replyNodes;
    /**
     * 主题的type（状态）
     */
    public List<ReplyStatus> status;
    /**
     * 单帖回复
     */
    public boolean replyOnce;
    /**
     * 由回复数计算得来的最大页数
     */
    public int totalPage;
    /**
     * 标题颜色
     */
    public int color;
    /**
     * 加粗
     */
    public boolean bold;
    /**
     * 删除线
     */
    public boolean lineThrough;
    /**
     * 斜体
     */
    public boolean italic;
    /**
     * 主题状态，用以复原状态数据
     */
    public int type;
    /**
     * 是否被选中
     */
    public boolean checked;
    /**
     * 是否为镜像贴
     */
    public boolean mirror;


    public TopicItem() {
    }

    public TopicItem(TopicInfoSimple data) {
        type = data.getType() != null ? data.getType() : 0;
        entranceType = EntranceType.TOPIC;
        authorId = data.getAuthorUid();
        topicId = data.getTopicId();
        forumId = data.getForumId();
        title = data.getTitle();
        postDateTime = data.getPostDatetime();
        status = data.getStatus();
    }

    public TopicItem(TopicInfo data) {
        this((TopicInfoSimple) data);

        // 镜像主题，跳转到来源贴
        if (data.getQuoteFromTopicId() != null && data.getQuoteFromTopicId() > 0) {
            topicId = data.getQuoteFromTopicId();
            mirror = true;
        }
        replyOnce = data.isReplyOnce();
        entranceType = data.getEntranceType();
        authorName = data.getAuthorName();
        lastPosterName = data.getLastPosterName();
        replyCount = data.getReplies() != null ? data.getReplies() : 0;
        lastPost = data.getLastPost();

        // 标题字体样式
        TitleFont titleFont = data.getTitleFont();
        // 标题颜色
        TitleColor color = titleFont != null ? titleFont.getColor() : TitleColor.DEFAULT;
        if (color == TitleColor.DEFAULT) {
            this.color = 0;
        } else {
            this.color = Color.parseColor("#" + color.rgb);
        }
        // 加粗 斜体 删除线
        if (titleFont != null) {
            this.bold = titleFont.isBold();
            this.lineThrough = titleFont.isLineThrough();
            this.italic = titleFont.isItalic();
        }


        TopicParent topicParent = data.getTopicParent();
        if (topicParent != null) {
            this.parentForumName = String.format(Locale.CHINA, "[%s]", topicParent.getName());
        }

        // 查询用户回复时 ，该字段存在
        ReplySimple reply = data.getReply();
        if (reply != null) {
            replyId = reply.getReplyId();
            replyContent = reply.getContent();
            replyNodes = reply.getContentNodes();
            if (reply.getPostDatetime() != null) {
                replyTimestamp = TimeAgo.ago(reply.getPostDatetime());
            }
        }

        // 计算总页数
        {
            int total = replyCount + 1;
            int p = total / 20;
            int m = total % 20;
            this.totalPage = p + (m > 0 ? 1 : 0);
        }
    }


}
